package inventario.facade;

import inventario.code.*;

import java.util.ArrayList;
import java.util.Scanner;

/**
 * 
 * @author Pedro Augusto, Rafael Ribeiro, Talita Lobo
 *
 */
public class CriaRemoveAlocacao {

	private ArrayList<Alocacao> alocacoes = new ArrayList<Alocacao>();
	private ArrayList<Usuario> usuarios;
	private ArrayList<Maquina> maquinas;
	private ArrayList<Sala> salas;
	private static Scanner input;

	public CriaRemoveAlocacao(ArrayList<Usuario> usuarios,
			ArrayList<Maquina> maquinas, ArrayList<Sala> salas) {

		this.maquinas = maquinas;
		this.salas = salas;
		this.usuarios = usuarios;

	}

	/**
	 * Metodo que recebe um inteiro.
	 * 
	 * @return A string capturada
	 */
	private static int recebeInt() {
		limpaScan();
		return input.nextInt();
	}

	/**
	 * Limpa o scanner.
	 */
	public static void limpaScan() {
		input = new Scanner(System.in);
	}

	/**
	 * Metodo que cria alocacao de sala, usuario e maquina.
	 * @return True se adicionada com sucesso e false caso nao adicionada
	 * @throws Exception
	 */
	public boolean criaAlocacao() throws Exception {
		
		if(usuarios.size() == 0){
			System.out.println("\n                Nao existe Usuarios a serem Alocados! \n");
			return false;
		}
		
		if(maquinas.size() == 0){
			System.out.println("\n                Nao Existem Maquinas a serem Alocadas! \n");
			return false;
		}
		
		if(salas.size() == 0){
			System.out.println("\n                Nao Existem Salas a serem Alocadas! \n");
			return false;
		}
		System.out.print("\n           .: Escolha uma Pessoa para Alocar: \n");

		for (int a = 0; a < usuarios.size(); a++) {
			System.out.println(a + 1 + " - " + usuarios.get(a).getNome());
		}

		int opcao = recebeInt();

		if (opcao > usuarios.size()) {
			System.out.println("                Opcao Invalida. Tente Novamente. ");
			criaAlocacao();
		}

		Usuario user = usuarios.get(opcao - 1);

		System.out.println("\n           .: Escolha uma Sala: ");

		for (int a = 0; a < salas.size(); a++) {
			System.out.println(a + 1 + " - " + salas.get(a).getNome());
		}

		int op = recebeInt();

		if (op > salas.size()) {
			System.out.println(" \n               Opcao Invalida. Tente Novamente. ");
			criaAlocacao();
		}
		Sala sala = salas.get(op - 1);

		System.out
				.print("\n           .: Escolha uma Maquina para o Usuario: ");

		for (int a = 0; a < maquinas.size(); a++) {
			System.out.println(a + 1 + " - " + maquinas.get(a).toString());
		}
		int opcaom = recebeInt();

		if (opcaom > maquinas.size()) {
			System.out.println("                Opcao Invalida. Tente Novamente. ");
			criaAlocacao();
		}

		Maquina maq = maquinas.get(opcaom - 1);

		Alocacao alocacao = new Alocacao(maq, user, sala);
		alocacoes.add(alocacao);

		System.out.println("Sala: " + sala.getNome() + "\n" + user.getNome()
				+ "\n Maquina usada por " + user.getNome() + ": "
				+ maq.getNome());
		System.out.println("\n           .: Alocacao Feita com Sucesso! \n");
		return true;
	}

	/**
	 * Metodo que remove a alocacao.
	 */
	public boolean removeAlocacao() {
		if(alocacoes.isEmpty()){
			System.out.println("Nao existe Alocacoes a serem removidas! ");
			return false;
		}
		System.out.println("\n           .: Escolha uma Alocao p/ Remover \n");

		for (int a = 0; a < alocacoes.size(); a++) {
			System.out.println(a + 1 + " - " + alocacoes.get(a).toString()
					+ "\n");
		}

		int opcao = recebeInt();
		alocacoes.remove(opcao - 1);
		System.out.println("\n                Alocaco Removida Com Sucesso: \n");
		return true;
	}

	/**
	 * Move usuario de uma alocacao para outra.
	 */
	public void moverUsuario() {
		System.out.println("\n          Escolha o Usuario a ser Movido. ");
		for (int a = 0; a < alocacoes.size(); a++) {
			System.out.println(a + 1 + " - "
					+ alocacoes.get(a).getUsuario().getNome());

		}
		int opcao = recebeInt();
		Alocacao alocacao = alocacoes.get(opcao-1);

		System.out.println("\n          Escolha a Nova Sala de"
				+ alocacao.getUsuario().getNome() + ":\n");
		for (int a = 0; a < salas.size(); a++) {
			System.out.println(a + 1 + " - " + salas.get(a).getNome());
		}
		Sala novasala = salas.get(recebeInt()-1);

		alocacao.setSala(novasala);
		System.out.println("\n                Sala Alterada Com Sucesso. \n");
		System.out.println(alocacao.toString());
	}

}
